﻿// ------------------------------------------------------------------------
// 版权信息
// 版权归重庆虫儿飞科技有限公司所有。
// 所有权利保留。
// 官方网站：https://netokit.com
// 许可证信息
// Neto.Kit 项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。
// 许可证的完整文本可以在源代码树根目录中的 LICENSE-APACHE 和 LICENSE-MIT 文件中找到。
// 
// 使用条款
// 使用本代码应遵守相关法律法规和许可证的要求。
// 
// 免责声明
// 对于因使用本代码而产生的任何直接、间接、偶然、特殊或后果性损害，我们不承担任何责任。
// 
// 其他重要信息
// Neto.Kit 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。
// 有关 Neto.Kit 项目的其他详细信息，请参阅位于源代码树根目录中的 COPYRIGHT 和 DISCLAIMER 文件。
// 
// 更多信息
// 请访问 https://netokit.com 获取更多关于 Neto.Kit 项目的许可证和版权信息。
// ------------------------------------------------------------------------

namespace Neto.Core.Entities;

/// <summary>
///     用户
/// </summary>
[SugarTable("Sys_User", TableDescription = "用户")]
[SugarIndex("Index_{table}_CreationTime", nameof(CreationTime), OrderByType.Desc)]
[SugarIndex("Index_{table}_Account", nameof(Account), OrderByType.Asc)]
[SugarIndex("Index_{table}_Email", nameof(Email), OrderByType.Asc)]
public class SysUser : SsFullEntityNoIdentity
{
    /// <summary>
    ///     用户名(必填)
    /// </summary>
    [SugarColumn(ColumnDescription = "用户名", Length = 100)]
    public string Account { get; set; }

    /// <summary>
    ///     密码
    /// </summary>
    [SugarColumn(ColumnDescription = "密码")]
    public string Pwd { get; set; }

    /// <summary>
    ///     账户类型
    /// </summary>
    [SugarColumn(ColumnDescription = "账户类型")]
    public UserType UserType { get; set; }

    /// <summary>
    ///     是否启用
    /// </summary>
    [SugarColumn(ColumnDescription = "是否启用")]
    public bool IsEnable { get; set; }

    /// <summary>
    ///     是否测试
    /// </summary>
    [SugarColumn(ColumnDescription = "是否测试")]
    public bool IsTest { get; set; }

    /// <summary>
    ///     昵称
    /// </summary>
    [SugarColumn(ColumnDescription = "昵称")]
    public string Nick { get; set; }

    /// <summary>
    ///     邮箱(必填)
    /// </summary>
    [SugarColumn(ColumnDescription = "邮箱", Length = 200)]
    public string Email { get; set; }

    /// <summary>
    ///     省份
    /// </summary>
    [SugarColumn(ColumnDescription = "省份")]
    public string Province { get; set; }

    /// <summary>
    ///     城市
    /// </summary>
    [SugarColumn(ColumnDescription = "城市")]
    public string City { get; set; }

    /// <summary>
    ///     镇
    /// </summary>
    [SugarColumn(ColumnDescription = "镇")]
    public string Town { get; set; }

    /// <summary>
    ///     详细地址
    /// </summary>
    [SugarColumn(ColumnDescription = "详细地址")]
    public string Address { get; set; }

    /// <summary>
    ///     联系电话
    /// </summary>
    [SugarColumn(ColumnDescription = "联系电话")]
    public string Phone { get; set; }

    /// <summary>
    ///     办公电话
    /// </summary>
    [SugarColumn(ColumnDescription = "办公电话")]
    public string Tel { get; set; }

    /// <summary>
    ///     备注
    /// </summary>
    //[Comment("备注")]
    //[SugarColumn(ColumnDescription ="备注",InsertSql = "pgp_sym_encrypt('{0}','123456')",UpdateSql = "pgp_sym_encrypt('{0}','123456')",QuerySql = "pgp_sym_decrypt('remark','123456')")]
    [SugarColumn(ColumnDescription = "备注", SqlParameterDbType = typeof(SqlSugarDataEncryptConvert))]
    public string Remark { get; set; }

    /// <summary>
    ///     最后登录时间
    /// </summary>
    [SugarColumn(ColumnDescription = "最后登录时间")]
    public DateTimeOffset? LastLoginTime { get; set; }

    /// <summary>
    ///     最后登录IP
    /// </summary>
    [SugarColumn(ColumnDescription = "最后登录IP")]
    public string LastLoginIp { get; set; }

    /// <summary>
    ///     最后登录用户浏览器信息
    /// </summary>
    [SugarColumn(ColumnDescription = "最后登录用户浏览器信息")]
    public string LastLoginUserAgent { get; set; }

    /// <summary>
    ///     是否可以使用Swagger
    /// </summary>
    [SugarColumn(ColumnDescription = "是否可以使用Swagger", DefaultValue = "0")]
    public bool IsSwagger { get; set; }


    /// <summary>
    /// 登录失败次数
    /// 登录成功后重置
    /// </summary>
    [SugarColumn(ColumnDescription = "登录失败次数", DefaultValue = "0")]
    public int LoginFailedCount { get; set; }

    /// <summary>
    /// 末次尝试登录时间
    /// </summary>
    [SugarColumn(ColumnDescription = "末次尝试登录时间")]
    public DateTime? LastLoginAttempt { get; set; }

    #region ref

    /// <summary>
    ///     多对多
    /// </summary>
    [SugarColumn(IsIgnore = true)]
    [Navigate(typeof(SysUserRole), nameof(SysUserRole.UserId), nameof(SysUserRole.RoleId))] //注意顺序
    public List<SysRole> Roles { get; set; }

    [SugarColumn(IsIgnore = true)] public List<SysUserRole> UserRoles { get; set; }

    /// <summary>
    ///     部门ID
    /// </summary>
    [SugarColumn(ColumnDescription = "部门ID", DefaultValue = "0")]
    public long DeptId { get; set; }

    #endregion ref
}